package routers

import (
	"github.com/gin-gonic/gin"
	"menu-generation-go/database"
	"menu-generation-go/handlers/dailycheckin"
	"menu-generation-go/handlers/menu"
	"menu-generation-go/handlers/notice"
	"menu-generation-go/handlers/statistic"
	"menu-generation-go/handlers/sys"
	"menu-generation-go/handlers/week"
	"menu-generation-go/middlewares"
)

func SetupRouter(db *database.Database) *gin.Engine {
	router := gin.Default()

	// 初始化处理器
	menu := menu.NewMenuFoodIngredientHandler(db)
	notice := notice.NewMenuNoticeHandler(db)
	statistic := statistic.NewStatisticController(db)
	system := sys.NewAuthLoginHandler(db)
	mine := sys.NewMenuUserHandler(db)
	// 初始化处理器
	weekMenuHandler := week.NewWeekMenuHandler(db)
	dayMenuHandler := week.NewDayMenuHandler(db)
	recipeHandler := week.NewRecipeHandler(db)

	dailyCheckinHandler := dailycheckin.NewCheckinHandler(db)

	public := router.Group("/api/v1/public")
	{
		// 食材相关路由
		public.POST("/login", system.Login)
		public.POST("/logout", system.Logout)

	}

	// API路由组-需要token
	api := router.Group("/api/v1/core", middlewares.JWTAuth())
	{
		// 食材相关路由
		api.GET("/menuList", menu.GetIngredientsByType)          // 根据指定type获取食材列表
		api.GET("/getCategoryCounts", menu.GetCategoryCounts)    // 获取分类-食材分类数量
		api.POST("/addCategoryMenu", menu.AddCategoryMenu)       // 获取分类-新增分类菜品
		api.POST("/updateCategoryMenu", menu.UpdateCategoryMenu) // 获取分类-修改分类菜品
		api.POST("/deleteCategoryMenu", menu.DeleteCategoryMenu) // 获取分类-根据id删除指定分类菜品(舍弃)
		// 通知相关路由
		api.GET("/getNotices", notice.GetNotices) // 获取首页-通知列表
		// 统计相关路由
		api.GET("/weeklyStat", statistic.GetWeeklyStatistics) // 获取首页-本周用餐统计数据
		api.POST("/recordMeal", statistic.RecordMeal)         // 录入统计
		api.POST("/weeklyStatList", statistic.WeeklyStatList) // 录入统计-展示统计列表

		// 菜品相关

		// 周菜单路由
		{
			api.POST("/createWeekMenu", weekMenuHandler.CreateWeekMenu)
			api.POST("/listWeekMenus", weekMenuHandler.ListWeekMenus)
			api.POST("/deleteWeekMenu", weekMenuHandler.DeleteWeekMenu)
			api.POST("/getWeekMenuDetail", dayMenuHandler.GetWeekMenuDetail)
		}

		// 每日菜单路由
		{
			api.PUT("/:id", dayMenuHandler.UpdateDayMenuDishes)
		}

		// 菜品路由
		{
			api.GET("/listRecipes", recipeHandler.ListRecipes)
		}

		// mine我的路由
		{
			api.GET("/getUserInfo", mine.GetUserInfo)        // 获取用户信息
			api.POST("/updateUserInfo", mine.UpdateUserInfo) // 更新用户信息
		}

		// 每日打卡
		{
			api.POST("/dailyCheckin", dailyCheckinHandler.Checkin)
			api.POST("/getCheckinStatus", dailyCheckinHandler.GetCheckinStatus)
			api.POST("/getCheckinHistory", dailyCheckinHandler.GetCheckinHistory)
		}
	}
	return router
}
